home *** CD-ROM | disk | FTP | other *** search
/ Aminet 21 / Aminet 21 (1997)(GTI - Schatztruhe)[!][Oct 1997].iso / Aminet / dev / misc / gms_dev.lha / GMS / Source / C / Blitter / Rosette.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-09  |  1.7 KB  |  70 lines

  1. /*
  2. ** Name:      Rosette
  3. ** Author:    Paul Manias
  4. ** Copyright: DreamWorld Productions (c) 1997
  5. ** SAS/C:     sc Rosette.c link startup=lib:gms.o data=far opt math=standard nostackcheck
  6. ** Doc:       Draws various rosette patterns.
  7. **
  8. **
  9. */
  10.  
  11. #include <proto/games.h>
  12. #include <math.h>
  13.  
  14. extern struct GMSBase *GMSBase;
  15. APTR   PREFSNAME = DEFAULT;
  16.  
  17. struct GameScreen *screen;
  18.  
  19. void Rosette(void);
  20.  
  21. #define AMTCOLOURS 32
  22.  
  23. ULONG palette[AMTCOLOURS] = {
  24.   0x000000,0x101010,0x171717,0x202020,0x272727,0x303030,0x373737,0x404040,
  25.   0x474747,0x505050,0x575757,0x606060,0x676767,0x707070,0x777777,0x808080,
  26.   0x878787,0x909090,0x979797,0xa0a0a0,0xa7a7a7,0xb0b0b0,0xb7b7b7,0xc0c0c0,
  27.   0xc7c7c7,0xd0d0d0,0xd7d7d7,0xe0e0e0,0xe0e0e0,0xf0f0f0,0xf7f7f7,0xffffff
  28. };
  29.  
  30. /***********************************************************************************/
  31.  
  32. void main(void)
  33. {
  34.   if (screen = AddScreenTags(TAGS_GAMESCREEN,NULL,
  35.      GSA_AmtColours, AMTCOLOURS,
  36.      GSA_Palette,    palette,
  37.      TAGEND)) {
  38.  
  39.      ShowScreen(screen);
  40.      InitJoyPorts();
  41.  
  42.      Rosette();
  43.  
  44.   DeleteScreen(screen);
  45.   }
  46. }
  47.  
  48. /***********************************************************************************/
  49.  
  50. void Rosette(void)
  51. {
  52.   WORD   offsetx = (screen->ScrWidth/2);
  53.   WORD   offsety = (screen->ScrHeight/2);
  54.  
  55.   /* Experiment with the values below */
  56.   double inside=3.0, radius=100.0, outside=3.0, f=0.5, edges=10;
  57.  
  58.   double t,angle,x,y;
  59.  
  60.   for (t = -inside/10; t < (outside/10); t += 0.1) {
  61.     for (angle=0; angle < (2*PI); angle += 0.01) {
  62.       x = radius*cos(angle)+t*radius*cos(angle*edges);
  63.       y = radius*sin(angle)+t*radius*sin(angle*edges);
  64.       DrawPixel(screen->Bitmap,(WORD)(x+offsetx),(WORD)(y*f+offsety),10);
  65.     }
  66.   }
  67.   WaitLMB();
  68. }
  69.  
  70.